package com.jt.factory;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;

import java.util.Calendar;

/**
 * FactoryBean是spring提供的接口，spring自动完成调用，获取指定对象
 *
 * 难点讲解：
 * 1.@Component 标识类 则将该类交给spring容器管理
 * 2.spring中的FactoryBean的讲解  如果spring加载的时候遇到FactoryBean接口时，
 * 则会自动执行重写方法
 * 3.工厂模式说明：
 *      Map<key=calendar,value=calendar对象>
 * 核心功能：
 *      1.key:就时当前类型（如果自己编辑注解以注解为准）
 *      2.value:调用getObject获取返回值对象
 *      将上述的数据，交给Sprig容器管理
 * 该功能什么时候使用：
 *      1.某些对象不能直接实例化
 *      2.整合其他第三方框架对象时，经常使用
 */
@Component
//@Component("calendar111")
public class CalendarFactory implements FactoryBean<Calendar> {

    public CalendarFactory(){
        System.out.println("工厂模式的无参构造");
    }

    //动态执行该方法，获取返回值对象
    @Override
    public Calendar getObject() throws Exception {
        //利用calendar的工具API，实现对象的创建
        return Calendar.getInstance();
    }

    @Override
    public Class<?> getObjectType() {
        //固定写法，一般直接xxx。calss
        return Calendar.class;
    }
}
